#============================================================
#	Node Utils
#============================================================
# @datetime: 2022-7-31 18:31:44
#============================================================
class_name NodeUtils
extends Node



##  扫描所有节点
##[br]
##[br][code]parent_node[/code]  开始的父节点
##[br][code]filter_method[/code]  过滤方法。这个方法有一个参数用于接收传入的节点，如果返回 true，则添加，否则不添加
##[br][code]return[/code]  返回扫描到的所有节点
static func scan_all_node( parent_node: Node, filter_method: Callable = func(node): return true ) -> Array:
	var list = []
	_scan_all_node(parent_node, list, filter_method)
	return list


static func _scan_all_node(parent: Node, list: Array, filter_method: Callable):
	for child in parent.get_children():
		if filter_method == null or filter_method.call(child):
			list.append(child)
	for child in parent.get_children():
		_scan_all_node(child, list, filter_method)



##  根据 Class 获取父节点
##[br]
##[br][code]node[/code]  开始节点
##[br][code]_class[/code]  祖父节点的类
##[br][code]return[/code]  返回符合的类的祖父节点
static func get_parent_by_class(node: Node, _class) -> Node:
	var p = node.get_parent()
	while not p is _class and p != node.get_tree().root:
		p = p.get_parent()
	return p

